const validate = {}

/** 是否合法IP地址*/
validate.validateIP = function(rule, value, callback) {
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
    if (!reg.test(value) && value !== '') {
      callback(new Error('请输入正确的IP地址'))
    } else {
      callback()
    }
  }
}

/** 是否手机号码或者固话*/
validate.validatePhoneTwo = function(rule, value, callback) {
  const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if (!reg.test(value) && value !== '') {
      callback(new Error('请输入正确的电话号码或者固话号码'))
    } else {
      callback()
    }
  }
}

/** 是否固话*/
validate.validateTelphone = function(rule, value, callback) {
  const reg = /0\d{2,3}-\d{7,8}/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if (!reg.test(value) && value !== '') {
      callback(new Error('请输入正确的固定电话）'))
    } else {
      callback()
    }
  }
}

/** 是否手机号码*/
validate.validatePhone = function(rule, value, callback) {
  const reg = /^[1][3-9][0-9]{9}$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if (!reg.test(value) && value !== '') {
      callback(new Error('请输入正确的电话号码'))
    } else {
      callback()
    }
  }
}

/** 是否身份证号码*/
validate.validateIdNo = function(rule, value, callback) {
  const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if (!reg.test(value) && value !== '') {
      callback(new Error('请输入正确的身份证号码'))
    } else {
      callback()
    }
  }
}

/** 是否邮箱*/
validate.validateEMail = function(rule, value, callback) {
  const reg = /^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if (!reg.test(value)) {
      callback(new Error('请输入正确的邮箱'))
    } else {
      callback()
    }
  }
}

/** 合法url*/
validate.validateURL = function(url) {
  const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return urlregex.test(url)
}

/** 验证内容是否包含英文数字以及下划线*/
validate.isPassword = function(rule, value, callback) {
  const reg = /^[_a-zA-Z0-9]+$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if (!reg.test(value)) {
      callback(new Error('仅由英文字母，数字以及下划线组成'))
    } else {
      callback()
    }
  }
}

/** 验证企业微信是否包含英文数字*/
validate.isCompanyWeChat = function(rule, value, callback) {
  const reg = /^[a-zA-Z0-9]+$/
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    if (!reg.test(value)) {
      callback(new Error('仅由英文字母，数字组成'))
    } else {
      callback()
    }
  }
}

/** 自动检验数值的范围*/
validate.checkMax20000 = function(rule, value, callback) {
  if (value === '' || value === undefined || value === null) {
    callback()
  } else if (!Number(value)) {
    callback(new Error('请输入[1,20000]之间的数字'))
  } else if (value < 1 || value > 20000) {
    callback(new Error('请输入[1,20000]之间的数字'))
  } else {
    callback()
  }
}

/** 验证是否整数*/
validate.isInteger = function(rule, value, callback) {
  if (value === '' || value === null || value === undefined) {
    return callback(new Error('输入不可以为空'))
  }
  setTimeout(() => {
    if (!Number(value)) {
      callback(new Error('请输入正整数'))
    } else {
      const re = /^[0-9]*[1-9][0-9]*$/
      const rsCheck = re.test(value)
      if (!rsCheck) {
        callback(new Error('请输入正整数'))
      } else {
        callback()
      }
    }
  }, 0)
}

/** 是否含有字符,*/
validate.isChar = function(rule, value, callback) {
  const reg = value.split(',')
  if (value === '' || value === null || value === undefined) {
    callback()
  } else {
    if (!reg || reg.length < 2) {
      callback(new Error('必须包含,作为分隔符'))
    } else {
      callback()
    }
  }
}

/** 是否能被分割为数组*/
validate.isSplit = function(rule, value, callback) {
  const reg = value.split(',')
  if (value === '' || value === null || value === undefined) {
    callback()
  } else {
    if (!reg) {
      callback(new Error('编码格式不正确'))
    } else {
      for (let i = 0; i < reg.length; i++) {
        if (!/^\d+$/.test(reg[i])) {
          callback(new Error('编码格式不正确，编码由数字组成'))
        }
      }
      callback()
    }
  }
}

/** 密码校验*/
validate.validatePsdReg = function(rule, value, callback) {
  if (!value) {
    callback(new Error('请输入密码'))
  }
  if (
    !/^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,20}$/.test(
      value
    )
  ) {
    callback(new Error('请输入6-20位字符,字母、数字和符号至少包含两种'))
  } else {
    callback()
  }
}

/**
 * 是否合法IP地址
 * An highlighted block
 */
validate.validateIP = function(rule, value, callback) {
  if (value === '' || value === undefined || value === null) {
    callback()
  } else {
    const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
    if (!reg.test(value) && value !== '') {
      callback(new Error('请输入正确的IP地址'))
    } else {
      callback()
    }
  }
}

/** 验证2次输入的密码是否一致*/
validate.equalToPassword = function(rule, value, callback) {
  if (value === this.pwd.newPassword) {
    callback()
  } else {
    const error = new Error('两次输入的密码不一致')
    callback(error)
  }
}

/** 验证数字 */
validate.isFloateger = function(rule, value, callback) {
  if (
    /^(([0-9]+\.[0-9]{1,2})|([0-9]*[0-9][0-9]*\.[0-9]{1,2})|([0-9]*[0-9]))$/g.test(
      value
    )
  ) {
    if (value >= 0 && value <= 9999) {
      callback()
    } else {
      callback(new Error('数字超过了9999'))
    }
  } else {
    callback(new Error('请输入0-9999的数字，小数保留两位'))
  }
}

/** 验证数字 */
validate.isNumber = function(rule, value, callback) {
  if (
    /^(([0-9]+\.[0-9]{1,2})|([0-9]*[0-9][0-9]*\.[0-9]{1,2})|([0-9]*[0-9]))$/g.test(
      value
    )
  ) {
    if (value >= 0 && value <= 10000) {
      callback()
    } else {
      callback(new Error('数字超过了10000'))
    }
  } else {
    callback(new Error('请输入0-10000的数字，小数保留两位'))
  }
}

/** 验证数字 */
validate.isPercentNumber = function(rule, value, callback) {
  if (
    /^[0-9]*[1-9][0-9]*$/g.test(
      value
    )
  ) {
    if (value >= 0 && value <= 100) {
      callback()
    } else {
      callback(new Error('数字超过了100'))
    }
  } else {
    callback(new Error('请输入0-100的正整数'))
  }
}

/** 验证数字 */
validate.isFixNumber = function(rule, value, callback) {
  if (
    /^(([0-9]+\.[0-9]{1,2})|([0-9]*[0-9][0-9]*\.[0-9]{1,2})|([0-9]*[0-9]))$/g.test(
      value
    )
  ) {
    if (value >= 0 && value <= 100000) {
      callback()
    } else {
      callback(new Error('数字超过了100000'))
    }
  } else {
    callback(new Error('请输入0-10000的数字，小数保留两位'))
  }
}

export default validate
